#!/bin/bash
# curl -s https://gitee.com/yunwe/shell/raw/master/system_info.sh | sh

# 获取系统的主机名，内核版本，发行版信息
echo -e "\e[31;43m***** 系统信息 *****\e[0m"
echo "主机名：$(hostname)"
echo "内核版本：$(uname -r)"
echo "发行版：$(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2)"

# 获取CPU的型号，核心数，使用率，负载
echo -e "\e[31;43m***** CPU信息 *****\e[0m"
echo "型号：$(cat /proc/cpuinfo | grep "model name" | head -n 1 | cut -d: -f2)"
echo "核心数：$(nproc)"
echo "使用率：$(top -bn1 | grep "Cpu(s)" | awk '{printf "%.2f%%\n", 100-$8}')"
echo "负载：$(uptime | awk '{print $NF}')"

# 获取内存的总量，已用量，剩余量，使用率
echo -e "\e[31;43m***** 内存信息 *****\e[0m"
echo "总量：$(free -h | awk 'NR==2{print $2}')"
echo "已用量：$(free -h | awk 'NR==2{print $3}')"
echo "剩余量：$(free -h | awk 'NR==2{print $4}')"
echo "使用率：$(free -h | awk 'NR==2{printf "%.2f%%\n", $3*100/$2}')"


# 获取磁盘的总量，已用量，剩余量，使用率
echo -e "\e[31;43m***** 磁盘信息 *****\e[0m"
df -Tm | awk '/^\/dev\// {total+=$3; used+=$4; avail+=$5} END {printf "磁盘总量: %.0fG\n使用量: %.0fG\n可用量: %.0fG\n使用率: %.0f%%\n", total/1024, used/1024, avail/1024, used/total*100}'
echo "磁盘I/O:"
iostat -d -x -k
echo "rrqm/s    	合并读请求(单位/s)
wrqm/s	        合并写请求(单位/s)
r/s	        磁盘读请求(单位/s)
w/s		磁盘写请求(单位/s)
rkB/s		磁盘实际读取,单位s/KB
wkB/s		磁盘实际写入,单位s/KB
rareq-sz	平均读请求大小,单位kB
wareq-sz	平均写请求大小,单位kB
avgrq-sz	平均请求大小（以扇区为单位）
avgqu-sz	平均请求队列长度，新版为aqu-sz
await		处理 I/0 请求的平均时间，包括队列中的等待时间和设备实际处理时间，单位ms。
r_await		处理读取请求的平均时间，包括队列中的等待时间和设备实际处理时间，单位ms。
w_await		处理写入请求的平均时间，包括队列中的等待时间和设备实际处理时间，单位ms。
%util		磁盘处理I/O的时间百分比"

# 获取网络的IP地址，网关，DNS，流量
echo -e "\e[31;43m***** 网络信息 *****\e[0m"
echo -e "IP地址：$(hostname -I)"
echo "网关：$(ip route | grep default | awk '{print $3}')"
echo "DNS：
$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')"
# 获取所有网卡名称
interfaces=$(ls /sys/class/net | grep -v lo)
# 初始化变量
rx_total=0
tx_total=0
# 遍历所有网卡
for interface in $interfaces
do
    # 获取每个网卡的接收和发送的字节数
    rx_bytes=$(cat /sys/class/net/$interface/statistics/rx_bytes)
    tx_bytes=$(cat /sys/class/net/$interface/statistics/tx_bytes)
    # 累加到总的接收和发送字节数
    rx_total=$((rx_total + rx_bytes))
    tx_total=$((tx_total + tx_bytes))
done
# 输出总接收和发送字节数
echo "下载流量: $(bc <<< "scale=2; $rx_total / 1024 / 1024") MB"
echo "上行流量: $(bc <<< "scale=2; $tx_total / 1024 / 1024") MB"

# 获取当前登录用户，开机时间，系统时间
echo -e "\e[31;43m***** 其他信息 *****\e[0m"
echo "当前登录用户：$(who | awk '{print $1}')"
echo "开机时间：$(uptime -s)"
echo "系统时间：$(date +"%Y-%m-%d %H:%M:%S")"

# 获取连接数和打开的文件描述符
echo -e "\e[31;43m***** 连接数和文件描述符 *****\e[0m"
# 总连接数
echo "连接数：$(ss -s| grep 'TCP:'|awk '{print $2}')"
echo "文件描述符：$(ls -l /proc/$$/fd | wc -l)"
echo "等待连接数: $(ss -tan state time-wait | wc -l)"
